/*
 * 文件名：CommonFunction.java
 * 版权：Copyright by www.wootide.com
 * 描述：
 * 修改人：ozm
 * 修改时间：2013-1-29
 * 跟踪单号：
 * 修改单号：
 * 修改内容：
 */
package com.wootide.ets.common.util;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.Collection;
import java.util.List;
import java.util.Map;

import com.wootide.ets.common.Constants;
import com.wootide.ets.common.QueryCondition;

/**
 * 通用工具类
 * 〈一句话功能简述〉
 * 〈功能详细描述〉
 * @author ozm
 * @version 2013-1-29
 * @see CommonFunction
 * @since 2013-1-29上午10:30:22
 */
public abstract class CommonUtil
{
    //成功
    private static final int SUCCESS = 0;
    
    /**
     * 
     * Description: 判断Map是否未空
     * Implement: <br>
     * @param map 需要检查的Map
     * @see
     * @return boolean 是否为空
     * @author ozm2013-1-29上午10:36:50
     */
    @SuppressWarnings("rawtypes")
    public static boolean mapIsNull(Map map)
    {
        boolean isNull = true;
       
        if (null != map && !map.isEmpty())
        {
            isNull =  false;
        }
       
        return isNull;
    }
    
    /**
     * 
     * Description: 判断结合死否为空，List Set适用
     * Implement: <br>
     * @param col 要检查的结合
     * @return
     * @see
     * @return boolean 是否为空
     * @author ozm2013-1-29上午10:53:40
     */
    @SuppressWarnings("rawtypes")
    public static boolean collectionIsNull(Collection col)
    {
        boolean isNull = true;
        
        if (null != col && !col.isEmpty())
        {
            isNull =  false;
        }
       
        return isNull;
    }
   
   /**
    * 
    * Description: 将Object类型的数组转成字符串
    * Implement: <br>
    * @param objs 对象数组
    * @see
    * @return String 转换后的字符串
    * @author ozm2013-1-31上午9:19:43
    */
    public static String toString(Object[] objs)
    {
        if (null == objs)
        {
            return null;
        }
        StringBuilder sb = new StringBuilder();
        sb.append("[");
        for (int i = 0; i < objs.length; i++)
        {
            sb.append(objs[i]);
            if (i < objs.length - 1)
            {
                sb.append(Constants.Separator.SEPARATOR_COMMA);
            }
        }
        sb.append("]");
        return sb.toString();
    }
    
    /**
     * 检查数据库，如果违反唯一性约束，返回错误信息，否则返回成功
     * <功能详细描述>
     * @param resultCode 返回结果
     * @param passMessage 校验通过信息
     * @param errorMessage  错误信息
     * @return 页面提示信息
     * @see [类、类#方法、类#成员]
     */
    /**
     * 
     * Description: 检查数据库，如果违反唯一性约束，返回错误信息，否则返回成功
     * Implement: <br>
     * @param resultCode 返回结果
     * @param passMessage 校验通过信息
     * @param errorMessage  错误信息
     * @return
     * @see
     * @return String 页面提示信息
     * @author ozm2013-1-31下午2:55:16
     */
    public static String getExistCheckMessage(int resultCode, String passMessage, String errorMessage)
    {
        return (SUCCESS == resultCode) ? "{\"state\" : \"1\", \"message\" : \""
                + passMessage + "\"}"
                : "{\"state\" : \"0\", \"message\" : \""
                        + errorMessage
                        + "\"}";
    }
    
    
    /**
     * 判断查询条件是否存在
     * Description: <br>
     * Implement: <br>
     * @param queryConditon 查询条件
     * @see
     * @return boolean 查询条件是否存在
     * @author ozm2013-3-4上午9:45:11
     */
    public static boolean conditionExist(QueryCondition queryConditon)
    {
        if (null == queryConditon || !stringExist(queryConditon.getKey())
            || !stringExist(queryConditon.getValue()))
        {
            return false;
        }
        return true;
    }
    
    /**
     * 判断字符串是否存在
     * Description: <br>
     * Implement: <br>
     * @param str 字符串
     * @see
     * @return boolean 是否存在
     * @author ozm2013-3-4上午9:44:18
     */
    public static boolean stringExist(String str)
    {
        if (null == str || "".equals(str.trim()))
        {
            return false;
        }
        return true;
    }
    
    /**
     * 创建复合条件查询
     * Description: <br>
     * Implement: <br>
     * @param queryCondition 查询条件实例
     * @return
     * @see
     * @return QueryCondition 构造完成的复合查询对象
     * @author ozm2013-3-13上午10:52:42
     */
    public static QueryCondition createCompositeQueryCondition(QueryCondition queryCondition
            , List<String> conditionKeyList,List<String> conditionOperatorList,List<Object> conditionValueList)
    {
        queryCondition = queryCondition == null? new QueryCondition() : queryCondition;
        if (!collectionIsNull(conditionKeyList))
        {
            queryCondition.setConditionKeyList(conditionKeyList);
        }
        
        if (!collectionIsNull(conditionOperatorList))
        {
            queryCondition.setConditionOperatorList(conditionOperatorList);
        }
        
        if (!collectionIsNull(conditionValueList))
        {
            queryCondition.setConditionValueList(conditionValueList);
        }

        return queryCondition;
       
    }
    
    /**
     * 获取当前时间
     * Description: <br>
     * Implement: <br>
     * @return
     * @see
     * @return Timestamp
     * @author ozm2013-3-15上午10:34:42
     */
    public static Timestamp getCurrentTime()
    {
        return new Timestamp(System.currentTimeMillis());
    }
    
    /**
     * 补全SQL中的And
     * Description: <br>
     * Implement: <br>
     * @param sql 待处理的SQL
     * @param hasPreCondition 之前是否已经添加条件
     * @return
     * @see
     * @return String  处理完成的SQL字符串
     * @author ozm2013-3-26下午2:22:42
     */
    public static String makeSQL(String sql,boolean hasPreCondition)
    {
        if (hasPreCondition)
        {
            sql =  sql + " and ";
            
        }
        
        return sql;
    }
    
    /**
     * 返回时间字符串
     * Description: <br>
     * Implement: <br>
     * @param time 时间
     * @param format 输出格式
     * @return
     * @see
     * @return String
     * @author ozm2013-4-2下午2:05:34
     */
    public static String timeToString(Timestamp time,String format)
    {
        if (null == format)
        {
            //默认输出格式
            format = "yyyy-MM-dd HH:mm:ss";
        }
        
        if (null == time)
        {
            //默认使用系统时间
            time = getCurrentTime();
        }
        
        SimpleDateFormat dateFormat = new SimpleDateFormat(format);// 设定格式
        
        return dateFormat.format(time);
    }
}
